﻿//==========================================================
//Đã sửa bởi tranninh_86_yb@yahoo.com ngày 01/08/2013
//==========================================================

using System;
using System.Data;
using System.Data.SqlClient;

namespace prjKQXS_DLL.Danh_muc
{
    public class clsDMDLTC
    {
        private int cap;

        /// <summary>
        /// Cài đặt event OnError để bắt các lỗi chưa được xử lý
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnErrorHandler(Exception e);
        public event OnErrorHandler OnError;

        /// <summary>
        /// Cài đặt event OnAction để thông báo các trạng thái kết quả
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnActionHandler(SqlException e);
        public event OnActionHandler OnAction;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cap">Cấp đại lý</param>
        public clsDMDLTC(int cap)
        {
            this.cap = cap;
        }

        #region Functions ============================================================
        /// <summary>
        /// Kiểm tra xem SỐ PHIÊU THU có bị trùng hay không
        /// </summary>
        /// <param name="SoPhieuThu">Số phiếu thu</param>
        /// <param name="ID">DMCanBoID (đối với đại lý cấp 1) hoặc HopDongID (đối với đại lý cấp 2)</param>
        /// <returns>Nếu trùng thì trả về true, nếu không trùng thì trả về false</returns>
        public bool checkSoPhieuThu(string SoPhieuThu, int ID)
        {
            if (cap==1) return !clsCommon.isDuplicate("SoPhieuThu", SoPhieuThu, "LAIXUAT_CB", ID);
            else return !clsCommon.isDuplicate("SoPhieuThu", SoPhieuThu, "LAIXUAT_DL", ID);
        }

        public DataTable loadData(bool chkKhoiPhucCheckedState, int rgThanhLySelectedIndex)
        {
            SqlConnection conn = new SqlConnection(BienTc.connString);
            DataTable dt = new DataTable();

            try
            {
                if (cap == 1)
                {
                    //Chuỗi này lấy ra thông tin các đại lý cấp x có nộp thế chấp của toàn công ty
                    //CB.ID, CB.Ma_DT AS MaCB, CB.Ten_DT AS TenDL, SDT, DMCHUCVU.Ma_DT AS MaCV, Ma_DMDonVi as MaDV, Tien, SoPhieuThu,
                    //SoHD, NgayHD, Noi_O, NgayNopTC, NgayRutTC, Thanh_Ly, Ngay_ThanhLy, isKT
                    string sql = "proc_frmDanhMucDLTC";

                    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                    da.SelectCommand.CommandType = CommandType.StoredProcedure;
                    da.SelectCommand.Parameters.AddWithValue("@Mode", rgThanhLySelectedIndex);
                    da.SelectCommand.Parameters.AddWithValue("@Cap", 1);
                    if (chkKhoiPhucCheckedState) da.SelectCommand.Parameters.AddWithValue("@isPublic", 0);
                    else da.SelectCommand.Parameters.AddWithValue("@isPublic", 1);
                    da.Fill(dt);

                    //Thêm cột NgayBD, NgayTLKyTiep, NgayHenRutTC, NgayKTTL vào dt và điền dữ liệu cho chúng
                    dt.Columns.Add("NgayBD", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayTLKyTiep", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayHenRutTC", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayKTTL", Type.GetType("System.DateTime"));

                    DataTable dt2 = new DataTable();
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {

                            if (dt.Rows[i]["NgayNopTC"] != DBNull.Value)
                            {
                                int DMCanBoID = (int)dt.Rows[i]["ID"];

                                dt.Rows[i]["NgayBD"] = clsCommon.generateNgayBDTL((DateTime)dt.Rows[i]["NgayNopTC"]); //Điền dữ liệu cho NgayBD

                                //Điền dữ liệu cho NgayTLKyTiep và NgayKTTL
                                DateTime ngaytlkytiep = clsCommon.generateNgayTLKyTiep(1, DMCanBoID);
                                if (ngaytlkytiep.Date != new DateTime().Date)
                                {
                                    dt.Rows[i]["NgayTLKyTiep"] = ngaytlkytiep;
                                    if ((bool)dt.Rows[i]["isKT"])
                                        dt.Rows[i]["NgayKTTL"] = ngaytlkytiep;
                                }

                                //Điền dữ liệu cho NgayHenRutTC
                                if (dt.Rows[i]["Ngay_ThanhLy"] != DBNull.Value)
                                {
                                    DateTime d = (DateTime)dt.Rows[i]["Ngay_ThanhLy"];
                                    dt.Rows[i]["NgayHenRutTC"] = clsCommon.generateNgayHenRutTC(d);
                                }
                            }

                        }
                    }
                }
                else
                {
                    //Lấy ra thông tin các đại lý cấp 2 có nộp thế chấp
                    //HD.ID , Ma_DMDonVi as MaDV, HD.DMCanBoID as MaCB, HD.Ma_DaiLy as MaDL, Ten_DaiLy AS TenDL, HD.Noi_O, HD.Ma_DT as MaHD
                    //, Ngay_HD as NgayHD, NgayNopTC, SoPhieuThu, So_Tien, NgayRutTC, Thanh_Ly, HD.Ngay_ThanhLy, isKT
                    string sql = "proc_frmDanhMucDLTC";
                    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                    da.SelectCommand.CommandType = CommandType.StoredProcedure;
                    da.SelectCommand.Parameters.AddWithValue("@Mode", rgThanhLySelectedIndex);
                    da.SelectCommand.Parameters.AddWithValue("@Cap", 2);
                    if (chkKhoiPhucCheckedState) da.SelectCommand.Parameters.AddWithValue("@isPublic", 0);
                    else da.SelectCommand.Parameters.AddWithValue("@isPublic", 1);
                    da.Fill(dt);

                    //Thêm cột NgayBD, NgayTLKyTiep, NgayHenRutTC, NgayKTTL vào dt và điền dữ liệu cho chúng
                    dt.Columns.Add("NgayBD", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayTLKyTiep", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayHenRutTC", Type.GetType("System.DateTime"));
                    dt.Columns.Add("NgayKTTL", Type.GetType("System.DateTime"));

                    DataTable dt2 = new DataTable();
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            if (dt.Rows[i]["NgayNopTC"] != DBNull.Value)
                            {
                                int HopDongID = (int)dt.Rows[i]["ID"];

                                dt.Rows[i]["NgayBD"] = clsCommon.generateNgayBDTL((DateTime)dt.Rows[i]["NgayNopTC"]);//Điền dữ liệu cho NgayBD

                                //Điền dữ liệu cho NgayTLKyTiep, NgayKTTL
                                DateTime ngaytlkytiep = clsCommon.generateNgayTLKyTiep(2, HopDongID);
                                if (ngaytlkytiep.Date != new DateTime().Date)
                                {
                                    dt.Rows[i]["NgayTLKyTiep"] = ngaytlkytiep;
                                    if ((bool)dt.Rows[i]["isKT"])
                                        dt.Rows[i]["NgayKTTL"] = ngaytlkytiep;
                                }

                                //Điền dữ liệu cho NgayHenRutTC
                                if (dt.Rows[i]["Ngay_ThanhLy"] != DBNull.Value)
                                {
                                    DateTime d = (DateTime)dt.Rows[i]["Ngay_ThanhLy"];
                                    dt.Rows[i]["NgayHenRutTC"] = clsCommon.generateNgayHenRutTC(d);
                                }
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                OnAction(e);
            }
            catch (Exception e)
            {
                OnError(e);
            }

            return dt;
        }
        #endregion Functions =========================================================


        #region Methods ==============================================================
        public void Update(DataRow dr)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection conn = new SqlConnection(BienTc.connString);
                    conn.Open();

                    if (cap == 1)
                    {
                        string sql = "UPDATE LAIXUAT_CB SET SoPhieuThu=@SoPhieuThu, NgayNopTC=@NgayNopTC, NgayRutTC=@NgayRutTC " +
                            "WHERE DMCanBoID=@ID and isPublic=1";

                        SqlCommand cmd = new SqlCommand(sql, conn);
                        cmd.Parameters.AddWithValue("@ID", dr["ID"]);
                        cmd.Parameters.AddWithValue("@SoPhieuThu", dr["SoPhieuThu"]);
                        cmd.Parameters.AddWithValue("@NgayNopTC", dr["NgayNopTC"]);
                        cmd.Parameters.AddWithValue("@NgayRutTC", dr["NgayRutTC"]);
                        int i = cmd.ExecuteNonQuery();

                        if (i == 0)
                        {
                            sql = "INSERT LAIXUAT_CB (DMCanBoID, SoPhieuThu, NgayNopTC, NgayRutTC, isPublic) " +
                            "VALUES (@ID, @SoPhieuThu, @NgayNopTC, @NgayRutTC, 1)";
                            cmd = new SqlCommand(sql, conn);
                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@ID", dr["ID"].ToString());
                            cmd.Parameters.AddWithValue("@SoPhieuThu", dr["SoPhieuThu"].ToString());
                            cmd.Parameters.AddWithValue("@NgayNopTC", dr["NgayNopTC"]);
                            cmd.Parameters.AddWithValue("@NgayRutTC", dr["NgayRutTC"]);
                            i = cmd.ExecuteNonQuery();
                        }
                    }
                    else
                    {
                        string sql = "UPDATE LAIXUAT_DL SET SoPhieuThu=@SoPhieuThu, NgayNopTC=@NgayNopTC, NgayRutTC=@NgayRutTC " +
                            "WHERE HopDongID=@ID and isPublic=1";

                        SqlCommand cmd = new SqlCommand(sql, conn);
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@ID", dr["ID"]);
                        cmd.Parameters.AddWithValue("@SoPhieuThu", dr["SoPhieuThu"]);
                        cmd.Parameters.AddWithValue("@NgayNopTC", dr["NgayNopTC"]);
                        cmd.Parameters.AddWithValue("@NgayRutTC", dr["NgayRutTC"]);
                        int i = cmd.ExecuteNonQuery();

                        if (i == 0)
                        {
                            sql = "INSERT LAIXUAT_DL (HopDongID, SoPhieuThu, NgayNopTC, NgayRutTC, isPublic) " +
                            "VALUES (@ID, @SoPhieuThu, @NgayNopTC, @NgayRutTC, 1)";
                            cmd = new SqlCommand(sql, conn);
                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@ID", dr["ID"]);
                            cmd.Parameters.AddWithValue("@SoPhieuThu", dr["SoPhieuThu"]);
                            cmd.Parameters.AddWithValue("@NgayNopTC", dr["NgayNopTC"]);
                            cmd.Parameters.AddWithValue("@NgayRutTC", dr["NgayRutTC"]);
                            i = cmd.ExecuteNonQuery();
                        }
                    }
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }

        /// <summary>
        /// Xóa thông tin lãi chi tiết
        /// </summary>
        /// <param name="ID">DMCanBoID (đối với đại lý cấp 1) hoặc HopDongID (đối với đại lý cấp 2)</param>
        /// <param name="canRestore">true: Xóa tạm, có thể phục hồi; fale: xóa hẳn khỏi csdl, không thể phục hồi</param>
        public void Delete(int ID, bool canRestore)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection sqlconn = new SqlConnection(BienTc.connString);
                    sqlconn.Open();
                    SqlCommand cmd;

                    if (cap == 1)
                    {
                        if (canRestore)
                        {
                            cmd = new SqlCommand("UPDATE LAIXUAT_CB SET isPublic = 0 Where DMCanBoID = '" + ID + "' and isPublic=1", sqlconn);
                        }
                        else
                        {
                            cmd = new SqlCommand("DELETE LAIXUAT_CB WHERE DMCanBoID = '" + ID + "' and isPublic = 0", sqlconn);
                        }
                    }
                    else
                    {
                        if (canRestore)
                        {
                            cmd = new SqlCommand("UPDATE LAIXUAT_DL SET isPublic = 0 Where HopDongID = " + ID + " and isPublic=1", sqlconn);
                        }
                        else
                        {
                            cmd = new SqlCommand("DELETE LAIXUAT_DL WHERE HopDongID = " + ID + " and isPublic = 0", sqlconn);
                        }
                    }

                    int i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }

        /// <summary>
        /// Phục hồi thông tin lãi chi tiết
        /// </summary>
        /// <param name="ID">DMCanBoID (đối với đại lý cấp 1) hoặc HopDongID (đối với đại lý cấp 2)</param>
        public void Restore(int ID)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection sqlconn = new SqlConnection(BienTc.connString);
                    sqlconn.Open();
                    SqlCommand cmd;
                    if (cap==1) cmd = new SqlCommand("UPDATE LAIXUAT_CB SET isPublic = 1 Where DMCanBoID = '" + ID + "' and isPublic=0", sqlconn);
                    else cmd = new SqlCommand("UPDATE LAIXUAT_DL SET isPublic = 1 Where HopDongID = " + ID + " and isPublic=0", sqlconn);
                    int i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }
        #endregion ===================================================================
    }
}
